package com.hyt.obt.common;


import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class CSecModule {
    private static Logger logger  = LoggerFactory.getLogger(CSecModule.class);
	public static final int SUCCESS = 0;
	static
    {
        logger.error("java.library.path:"+System.getProperty("java.library.path"));
        System.loadLibrary("SecModule");
    }

	//1、文件加密
	//输入参数：szPass:密码 szSourceFile:要加密的文件
	//返回值：0-成功  <0-失败
    public native static int FileSign(String szPass,String szSourceFile);

    //2、文件解密
    //输入参数：szPass:密码 szSourceFile:要加密的文件
    //返回值：0-成功 <0-失败
    public native static int FileVerify(String szPass,String szSourceFile);

    //3、字符串加密
    //输入参数：szSource-需要加密的字符串
    //输出参数：szTarget-加密后的字符串，1个字母加密后为2个字符，1个汉字加密后为4个字符
    public native static int EncrypString(String szSource,StringBuffer szTarget);

    //4、字符串解密
    //输入参数：szSource-需要解密的字符串
    //输出参数：szTarget-解密后的字符串
    //返回值：0-成功
    public native static int DecrypString(String szSource,StringBuffer szTarget);

    //5、生成个人考试补时密码，生成个人迟到密码，整场考试密码，单机考试密码
    //输入参数：strExamID:每个考场场次唯一ID，iType:1-个人补时 2-整场考试密码 3-个人迟到密码 4-单机考试密码
    //iTime:补时时长,分钟，最小0
    //输出参数：strPass:考试密码
    //返回值：0-成功
    public native static int GenExamPass(String strExamID,int iType,int iTime,StringBuffer strPass);

    //6、验证个人考试补时密码、个人迟到密码、整场考试密码、单机考试密码
    //输入参数：strPass:考试密码,strExamID:每个考场场次唯 一ID，iType:1-个人补时 2-整场考试密码 3-个人迟到密码 4-单机考试密码
    //输出参数：strTime:补时时长，分钟，可为负数
    //返回值：0-验证成功  1-验证失败
    public native static int CheckExamPass(String strPass,String strExamID,int iType,StringBuffer strTime);

    //7、得到计算机唯一序号
    //输出参数：sSN:计算机序 号
    //返回值：0:成功   其它-失败
    public native static int GetJSJSN(StringBuffer strSN);
    //8、得到文件的MD5字符串
    //输入参数：fileName:需加密文件路径，md5Value：转换后的MD5值
    //返回值：0:成功   其它-失败
    public native static int GetFileSignMD5(String fileName,StringBuffer md5Value);

    /**
     * 检测加密狗是否存在，是否到下载时间
     * 1成功 0或-1失败
     * @return
     */
    public native static int CheckUSBDogDevice();

    /**
     * 文件碎片化
     * 返回-1表示分割失败,0表示成功
     * @param strPath 要分割的ZIP包路径文件名
     * @param iCount 1,3,5,10 表示1%，3%,5%,10%
     * @param objPath1 主分包路径文件名
     * @param objPath2 次分包路径文件名
     * @return
     */
    public native static int SplitFile(String strPath,int iCount,String objPath1,String objPath2);

    /**
     * 碎片化文件合并
     * 返回0成功，其他失败
     * @param strPath1 主包
     * @param strPath2 次包
     * @param objPath 合成文件
     * @return
     */
    public native static int MergeFile(String strPath1,String strPath2, String objPath);

    /**
     * 分割文件
     *
     * @param fileName 要分割文件绝对路径
     * @param savePath 保存目标“目录”绝对路径
     * @param sSuffix 后缀名称如“.split”
     * @param numOffFiles 分割数目(等比分割)
     * @param sOutFilePath 输出的分割文件路径（filepath1|filepath2|filepath3|....）
     * @return
     */
    public native static int SplitAvgFile(String fileName,String savePath, String sSuffix,int numOffFiles,StringBuffer sOutFilePath);

    /**
     * 合并文件
     *
     * @param sourcePath 分割文件目录绝对路径
     * @param savePath 保存目标“文件”绝对路径包含文件名(文件名与分割文件名关系为"分割文件：文件名.后缀（1|2|3|4.....）")
     * @param sSuffix 后缀名称如“.split”
     * @param numOfFiles 分割数目(等比分割)
     * @return
     */
    public native static int MergeAvgFile(String sourcePath,String savePath,String sSuffix,int numOfFiles);
    /**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO 自动生成的方法存根
       CSecModule module = new CSecModule();
       //1

       //int iresult=module.FileSign("hytOBTExam", "C:\\Users\\Administrator\\Desktop\\单机包\\1_100_1_F161440040100006.zip");
       //System.out.println("call FileSign,return value:"+iresult);
       //2
       /*String pwd = "hytOBTExam";
       String sqm = "5314E-HWR8V-N7SQS-LER6Q-5LEZK-F9U4M";
       int iresult=module.FileVerify(pwd, "C:\\Users\\Administrator\\Desktop\\仿真宁波模式试卷模板调整3_all");
       System.out.println("call FileVerify,return value:"+iresult);*/

        //int iresult2=module.FileVerify("hytSpokenExam", "E:\\离线考务包\\新考务联调\\examConfer2.bdp");
        //System.out.println("call FileVerify,return value:"+iresult2);

        try {
       /*//3


     //4
       StringBuffer str1=new StringBuffer(100);
       iresult=module.DecrypString("CAIQEEEMCNIN", str1);
       System.out.println("call DecrypString,retturn value:"+str1.toString());

       //5
       StringBuffer str2=new StringBuffer(10);
       iresult=GenExamPass("499",3,0,str2);
       System.out.println("call GenExamPass,retturn value:"+str2.toString());
       //6
       StringBuffer str3=new StringBuffer(10);
       iresult= CheckExamPass(str2.toString(),"123456789",4,str3);
       System.out.println("call CheckExamPass,retturn value:"+str3.toString());
       //7
       StringBuffer str4=new StringBuffer(100);
       iresult=GetJSJSN(str4);
       System.out.println("call GetJSJSN,retturn value:"+str4.toString());

       //解密cdp文件 解密后的解密文件还需要输入一次密码
       int iresulta=module.FileVerify("hytSpokenExam", "D:\\miffy\\源文件\\考场1_10_1.cdp");
       System.out.println("call FileVerify,cdp return value:"+iresulta);
       int iresultc=module.FileVerify("hytSpokenExam", "D:\\miffy\\源文件\\考场1_10_1.ckp");
       System.out.println("call FileVerify,ckp return value:"+iresultc);
       int iresultd=module.FileVerify("hytSpokenExam", "D:\\package\\UPLOADFILE\\1\\1011\\7\\岳麓明德考点_岳麓明德考场_7.cdp");
       System.out.println("call FileVerify,cdp return value:"+iresultd);

       int iresultf=module.FileVerify("hytSpokenExam", "D:\\package\\UPLOADFILE\\1\\1011\\7\\岳麓明德考点_岳麓明德考场_7.ckp");
       System.out.println("call FileVerify,ckp return value:"+iresultf);
       //解密oda文件
       int resultb=module.FileVerify("hytOBTExam", "D:\\miffy\\源文件\\nets\\岳麓区考点A_岳麓区考点A考场一_1.oda");
       System.out.println("call FileVerify,oda return value:"+resultb);
       int resulte=module.FileVerify("hytOBTExam", "D:\\miffy\\源文件\\nets\\岳麓区考点A_岳麓区考点A考场一_1.okw");
       System.out.println("call FileVerify,okw return value:"+resulte);

       int iresultg=module.FileVerify("hytSpokenExam", "D:\\package\\ANSWER\\TEMP\\岳麓明德考点\\岳麓明德考场\\7\\岳麓明德考点_岳麓明德考场_7.cdp");
       System.out.println("call FileVerify,cdp return value:"+iresultg);

       int iresulth=module.FileVerify("hytSpokenExam", "D:\\package\\ANSWER\\TEMP\\岳麓明德考点\\岳麓明德考场\\7\\岳麓明德考点_岳麓明德考场_7.ckp");

       System.out.println("call FileVerify,ckp return value:"+iresulth);
       StringBuffer md5Value=new StringBuffer();
       int Md5Flag=module.GetFileSignMD5("D:\\package\\ANSWER\\TEMP\\岳麓明德考点\\岳麓明德考场\\7\\岳麓明德考点_岳麓明德考场_7.cdp", md5Value);
       System.out.println("call FileVerify,md5 return value:"+Md5Flag+",md5:"+md5Value+"\\end");

        //文件分割
        int flag = module.SplitFile("E:\\离线考务包\\1\\20190415115311001482.zip",1,"E:\\离线考务包\\1\\20190415115311001482.zip.split1","E:\\离线考务包\\1\\20190415115311001482.zip.split2");

        int flag2 =  module.MergeFile("E:\\离线考务包\\1\\新建文件夹\\20190415115311001482.zip.split1","E:\\离线考务包\\1\\新建文件夹\\20190415115311001482.zip.split2","E:\\离线考务包\\1\\新建文件夹\\20190415115311001482.zip");*/

       /*  StringBuffer sb= new StringBuffer();
         int flag = module.SplitAvgFile("E:\\离线考务包\\1\\20190415115311001482.zip", "E:\\离线考务包\\1\\",".split",4, sb);
         System.out.println(flag);
         System.out.println(sb.toString());*/

       //  int flag2 = module.MergeAvgFile("E:\\离线考务包\\1\\","E:\\离线考务包\\1\\新建文件夹\\20190415115311001482.zip",".split",4);

            StringBuffer str=new StringBuffer();
            int iresult=module.EncrypString("root", str);
            System.out.println("call EncrypString,retturn value:"+str.toString());
       } catch(Exception ex) {
    	   System.out.println("call EncrypString,retturn value:");
       }


	}

}
